﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.ComponentModel;
using System.Text.RegularExpressions;

namespace CBE.Model
{
    public partial class Clientes : IDataErrorInfo
    {
        public Boolean IsNew { get; set; }

        public Clientes()
            : base()
        {
            this.ID_Cliente = Guid.NewGuid();

            this.IsNew = true;

            this._propertyChanged += new PropertyChangedEventHandler(Clientes__propertyChanged);
        }

        void Clientes__propertyChanged(object sender, PropertyChangedEventArgs e)
        {
            if (e.PropertyName == "ID_Cliente")
            {
                //HACK: reset de la bandera IsNew
                //TODO: revisar
                this.IsNew = false;
            }
        }

        public const string NombreApellidoCompletoPropertyName = "NombreApellidoCompleto";
        public String NombreApellidoCompleto
        {
            get { return this.Apellido + ", " + this.Nombre; }
        }

        public String DireccionCompleta
        {
            get
            {
                return String.Format("{0} {1} {2} {3}", this.Calle, this.Numero, this.Piso, this.Departamento);
            }
        }

        #region IDataErrorInfo Members

        public string Error
        {
            get { throw new NotImplementedException(); }
        }

        public string this[string columnName]
        {
            get
            {
                String error = null;

                if (columnName == "Apellido" && String.IsNullOrEmpty(Apellido))
                {
                    error = "El campo Apellido es de ingreso obligatorio.";
                }
                else if (columnName == "Nombre" && String.IsNullOrEmpty(Nombre))
                {
                    error = "El campo Nombre es de ingreso obligatorio.";
                }
                else if (columnName == "NumeroDocumento" && String.IsNullOrEmpty(NumeroDocumento))
                {
                    error = "El campo Numero de Documento es de ingreso obligatorio.";
                }
                else if (columnName == "CodigoPostal" && String.IsNullOrEmpty(CodigoPostal))
                {
                    error = "El campo Código Postal es de ingreso obligatorio.";
                }
                else if (columnName == "Calle" && String.IsNullOrEmpty(Calle))
                {
                    error = "El campo Calle es de ingreso obligatorio.";
                }
                else if (columnName == "Numero" && String.IsNullOrEmpty(Numero))
                {
                    error = "El campo Número es de ingreso obligatorio.";
                }
                else if (columnName == "Telefono" && String.IsNullOrEmpty(Telefono))
                {
                    error = "El campo Teléfono es de ingreso obligatorio.";
                }
                else if (columnName == "Mail")
                {
                    Regex reg = new Regex(@"^([a-zA-Z0-9_\-\.]+)@((\[[0-9]{1,3}" + 
                                          @"\.[0-9]{1,3}\.[0-9]{1,3}\.)|(([a-zA-Z0-9\-]+\" + 
                                          @".)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\]?)$");

                    if (String.IsNullOrEmpty(Mail))
                    {
                        error = "El campo Mail es de ingreso obligatorio.";
                    }
                    else if (!reg.IsMatch(Mail))
                    {
                        error = "El campo Mail no tiene un formato correcto.";
                    }
                }

                else if (columnName == "TiposDocumentos" && TiposDocumentos == null)
                {
                    error = "El campo Tipo de Documento es de ingreso obligatorio.";
                }
                else if (columnName == "Provincias" && Provincias == null)
                {
                    error = "El campo Provincia es de ingreso obligatorio.";
                }
                else if (columnName == "Localidades" && Localidades == null)
                {
                    error = "El campo Localidad es de ingreso obligatorio.";
                }
                else if (columnName == "FechaNacimiento")
                {
                    if (!FechaNacimiento.HasValue)
                    {
                        error = "El campo Fecha de Nacimiento es de ingreso obligatorio.";
                    }
                    else if (FechaNacimiento.Value.Date > DateTime.Now.Date)
                    {
                        error = "El campo Fecha de Nacimiento no puede ser mayor que la fecha del día.";
                    }
                }

                return error;
            }
        }

        #endregion

    }
}
